package cn.zxh.improvement.common.core.enums;

import java.util.Objects;

/**
 * 枚举 code 规则
 * 服务：01 占两位
 * 应用：01 占两位
 * code码： 001 占三位
 * 例如：0101001 这样就可以一模了然
 *
 * @author zxh
 * @date 2023/5/8 16:19:12
 */
@SuppressWarnings({"unchecked"})
public interface BaseEnum<T extends Enum<T> & BaseEnum<T, S>, S> {
    /**
     * 获取code
     *
     * @return code
     */
    S getCode();

    /**
     * 获取name
     *
     * @return name
     */
    String getName();

    /**
     * 解析code
     *
     * @param cls 继承类
     * @param code code
     * @param <T> 泛型
     * @return 解析code
     */
    static <T extends Enum<T> & BaseEnum<T, S>, S> T parseByCode(Class<T> cls, S code) {
        Enum<T>[] var2 = cls.getEnumConstants();
        for (Enum<T> anEnum : var2) {
            T t = (T) anEnum;
            if (Objects.equals(t.getCode(), code)) {
                return t;
            }
        }
        return null;
    }
}

